//
//  EZTableViewRowModel.m
//  EZFastBuildManager_Example
//
//  Created by 陈诚 on 2019/12/5.
//  Copyright © 2019 melo30. All rights reserved.
//

#import "EZTableViewRowModel.h"

@implementation EZTableViewRowModel

/**
    这里来记录下浅拷贝和深拷贝:
    copy有浅拷贝和深拷贝，具体想要实现哪一种，可以在copyWithZone和MutableCopyWithZone方法里面自定义实现。
        
    1.对于不可变对象，浅拷贝为指针拷贝，深拷贝为复制不可变副本
    2.对于可变对象，浅拷贝为不可变副本，深拷贝为可变副本
 
    如果是浅拷贝，直接在这样写就好了：
    - (id)copyWithZone:(NSZone *)zone {

        return self;

    }
 
        
    对于本库，显然我们的EZTableViewRowModel是一个可变的对象，需要深拷贝为一个可变的副本~
        
    还有，需要注意的是，不排除我们的EZTableViewRowModel以后会有子类继承，需要这样写EZTableViewRowModel *model = [[[self class] allocWithZone] init]; 因为这样写的话copyWithZone会被继承，当子类使用copy方法时，最终才会调用到父类的copyWithZone方法;
 
 */

/** NSCoping协议 实现深拷贝（即:副本拷贝） */
- (id)copyWithZone:(NSZone *)zone {
    EZTableViewRowModel *model = [[[self class] allocWithZone:zone] init];
    model.identifier = _identifier; //这里用self.identifier也可以
    model.data = _data;
    model.cellHeight = _cellHeight;
    return model;//返回副本
}

@end
